<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script>
      /* 
         闭包的生命周期;
            1. 闭包在外部函数调用的时候产生,外部函数每次调用都会产生一个新的闭包
            2. 在内部函数丢失的时候销毁(内部函数被垃圾函数回收了,闭包才会消失)

            注意事项:   
                闭包主要用来隐藏一些不需要被外部访问的内容
                    这就意味着闭包需要占用一定的内存空间

                相较于类来说,闭包比较浪费空间(类可以使用原型,但是闭包不能)
                    需要执行次数较少,可以使用闭包
                    需要大量创建实例,可以使用类
        */

        function outer() {
        let Number1 = 0
        return () =>{ 
            Number1++ 
            console.log(Number1)}
      }
      const newFn = outer()
      const newFn2 = outer()
            newFn()
            newFn2()

        newfn = null
        // 这个时候闭包消失,占用的空间才会消失
    </script>
  </head>
  <body></body>
</html>
